package com.jml.jdk8;


import java.util.Arrays;
import java.util.List;
import java.util.function.Consumer;

/**
 * @author:jml
 * @date: 2019/7/2 0002 22:29
 * @description：
 */
public class Test1 {

    public static void main(String[] args) {
        List<Integer> list = Arrays.asList(1,2,3,4,5);

        //传统两种遍历list
        for (int i = 0; i < list.size(); i++) {
            System.out.println(list.get(i));
        }
        for (Integer i: list) {
            System.out.println(i);
        }
        //jdk8遍历
        //Consumer是1.8新增的，有注解@FunctionalInterface表示函数式接口
        //函数式接口，就是一个接口只能有一个抽象方法。如果该接抽象方法有默认或者具体的实现就不是函数式接口
        //如果这个抽象方法覆盖了Object的public方法，这个不算函数式接口
        //函数式接口的实例可以通过lambda表达式创建，可以通过方法引用创建，可以通过构造方法引用创建

        //使用注解@FunctionalInterface编译报错的原因：不满足下面条件
        //1.类型是一个接口类型但是不是注解类型或者枚举类型或者类
        //2.满足函数式接口的要求
        list.forEach(new Consumer<Integer>() {
            @Override
            public void accept(Integer integer) {
                System.out.println(integer);
            }
        });
        System.out.println("-------------------");
        //
        list.forEach( (Integer consumer) -> System.out.println(consumer) );

        list.forEach( consumer -> System.out.println(consumer) );
        //方法引用
        list.forEach(System.out::println);
    }

}
